// 栈
#ifndef SQ_STACK_H
#define SQ_STACK_H

// 栈的元素最大个数（初始分配增量）
#define MAX_SIZE 1000

typedef char ElemType;

typedef struct
{
	ElemType *base; // 栈底指针
	ElemType *top;	// 栈顶指针
	int stackSize;	// 当前已分配的空间，以元素为单位
} SqStack;

/**
 * 初始化一个栈
 * @param stack 传入栈引用以初始化
 */
void initStack(SqStack &);

/**
 * 判断栈是否为空
 * @param stack 传入栈的引用
 * @return 栈是否为空
 */
int stackEmpty(SqStack &);

/**
 * 返回栈的长度
 * @param stack 传入栈的引用
 * @return 栈的元素个数
 */
int stackLength(SqStack &);

/**
 * 查看栈顶元素
 * @param stack 传入栈引用
 * @return 栈顶元素
 */
ElemType getTop(SqStack &);

/**
 * 元素压入栈
 * @param stack 传入栈的引用
 * @param e 放入元素
 */
void push(SqStack &, ElemType);

/**
 * 弹出栈顶元素
 * @param stack 传入栈引用
 */
ElemType pop(SqStack &);

/**
 * 遍历栈中每个元素并传入visit函数调用
 * @param stack 传入栈的引用
 * @param visit(ElemType&) 回调函数
 */
void StackTraverse(SqStack &, void(ElemType &));

#include "./sq-stack.cpp"

#endif